#pragma once
#include<iostream>
using namespace std;

#define MAX_SIZE 100
#define  ERROR  -1
//将ElemType 设置为int

//顺序表的定义
typedef struct {
	int* elem;
	int length;
}SqList;

//初始化顺序表		
//--时间复杂度为O(MAX_SZIE)--
bool InitSqList(SqList& L);

//销毁顺序表      
//--时间复杂度为O(1)--
void DestorySqList(SqList& L);

// 增加线性表元素		
//--时间复杂度为O(n)--
int SqListInsert(SqList& L, int i, int e);

// 获取线性表指定位置的值		
//--时间复杂度为O(n)--
int GetElem(SqList L, int i);

// 线性表的删除			
//--时间复杂度为O(n)--
int SqListDel(SqList& L, int i, int& e);


//链表定义

//单链表的定义
typedef struct LNode{
	int data;
	struct LNode* next;
}LNode ,*LinkList;

//带头结点单链表的初始化
//--时间复杂度O(1)--
bool Init_HeadLNode(LinkList &L);

//使用头插法创建一个单链表	
//--时间复杂度O(n)--
bool Create_front_LNode(LinkList &L, int n);

//使用尾插法创建一个单链表	
//--时间复杂度O(n)--
bool Create_behind_LNode(LinkList& L, int n);

//带头节点单链表的插入元素  
//--时间复杂度O(n)--
int Insert_HeadLNode(LinkList &L, int i, int e);

//带头结点单链表的删除元素  
//--时间复杂度O(n)--
int Delete_HeadLNode(LinkList &L, int i);

//带头结点单链表的查找（使用值来查找元素位置）返回元素值位置 
//--时间复杂度O(n)--
LNode* Search_HeadLNode(LinkList& L, int i);

//带头结点单链表的取值（使用位置来取得相应元素的值）返回值  
//--时间复杂度O(n)--
int Get_HeadLNode(LinkList& L, int e);

//销毁单链表
//--时间复杂度O(n)--
bool Destory_HeadLNode(LinkList& L);